package it.apiconsulting.live.controller;


import it.apiconsulting.live.model.Categoria;
import it.apiconsulting.live.util.HibernateUtil;

import java.util.List;

import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.classic.Session;


public class CategoriaManager extends HibernateUtil {

	public Categoria add(Categoria categoria) {
		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
		session.beginTransaction();
		session.save(categoria);
		session.getTransaction().commit();
		return categoria;
	}
	
	public Categoria update(Categoria categoria) {
		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
		session.beginTransaction();
		session.update(categoria);
		session.getTransaction().commit();
		return categoria;
	}
	
	public Categoria delete(Long id) {
		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
		session.beginTransaction();
		Categoria categoria = (Categoria) session.load(Categoria.class, id);
		if(null != categoria) {
			session.delete(categoria);
		}
		session.getTransaction().commit();
		return categoria;
	}

	public List<Categoria> list() {
		
		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
		session.beginTransaction();
		List<Categoria> categorie = null;
		try {
			
			Query queryCategory = session.createQuery("from Categoria");
			categorie = (List<Categoria>)queryCategory.list();
			
		} catch (HibernateException e) {
			e.printStackTrace();
			session.getTransaction().rollback();
		}
		session.getTransaction().commit();
		return categorie;
	}
	
	public Categoria getCategoriaById(Long idCategoria) {
		
		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
		session.beginTransaction();
		Categoria categoria = null;
		try {
			
			Query query = session.createQuery("from Categoria where id = "+ idCategoria);
			categoria = (Categoria)query.uniqueResult();
			
		} catch (HibernateException e) {
			e.printStackTrace();
			session.getTransaction().rollback();
		}
		session.getTransaction().commit();
		return categoria;
	}
	
}
